package com.yzc.Details;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yzc.model.entity.base.BaseEntity;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

@Slf4j
@Data
public class SecurityUser extends BaseEntity implements UserDetails {

	private static final long serialVersionUID = 1L;

	// 用户名字段映射（数据库字段 username）
	@TableField("username")
	private String username; // Spring Security 的 UserDetails 需要 username 字段

	// 密码字段映射（数据库字段 pass）
	@TableField("password")
	private String password; // UserDetails 需要 password 字段

	@TableField("beizhu")
	private String beizhu;

	@TableField("email")
	private String email;

	private String roleid;

	private String rolename;


	// 用户权限列表（非数据库字段）
//	@TableField(exist = false)
//	private List<String> userPermsList;

	// 实现 UserDetails 接口方法
	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
		if (rolename == null || rolename.isBlank()) {
			return Collections.emptyList();
		}

		return Arrays.stream(rolename.split(","))
				.map(String::trim)
				.filter(role -> !role.isEmpty())
				.map(this::mapToAuthority)
				.collect(Collectors.toList());
	}

	private GrantedAuthority mapToAuthority(String role) {
		return switch (role) {
			case "超级管理员" -> new SimpleGrantedAuthority("ROLE_ADMIN");
			case "普通用户" -> new SimpleGrantedAuthority("ROLE_USER");
			default -> new SimpleGrantedAuthority("ROLE_" + role);
		};
	}
	@Override
	public String getPassword() {
		return this.password; // 返回数据库中的密码字段
	}

	@Override
	public String getUsername() {
		return this.username; // 返回数据库中的用户名字段
	}

	// 账户状态配置（根据业务需求调整返回值）
	@Override
	public boolean isAccountNonExpired() {
		return true; // 账户未过期
	}

	@Override
	public boolean isAccountNonLocked() {
		return true; // 账户未锁定
	}

	@Override
	public boolean isCredentialsNonExpired() {
		return true; // 凭证未过期
	}

	@Override
	public boolean isEnabled() {
		return true; // 账户已启用
	}
}